perm filename VIXSAI.SAI[S,HE] blob sn#463431 filedate 1982-05-09 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00002 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	entry VIDXGQ
C00005 ENDMK
C⊗;
entry VIDXGQ;
BEGIN
EXTERNAL INTEGER PROCEDURE EXSWAP(STRING FILE);
external INTEGER PROCEDURE PUTPFL(REFERENCE INTEGER PICTURE; STRING FILNAM; INTEGER MODE(1));
EXTERNAL BOOLEAN PROCEDURE VIDXG(REFERENCE INTEGER PIC; INTEGER I0,J0,PLEN,NCOPY);
EXTERNAL BOOLEAN PROCEDURE VIDXGP(REFERENCE INTEGER PIC; INTEGER I0,J0,PLEN,NCOPY);

INTEGER PROCEDURE MANYJOB;
   BEGIN
   INTEGER I,J,K;
   J←0;
   FOR I←1 STEP 1 UNTIL '77 DO
      BEGIN K←CALL(I,"JBTSTS"); IF (K LAND '40000000000) THEN J←J+1; END;
   RETURN(J);
   END;

BOOLEAN PROCEDURE VIDXGF(REFERENCE INTEGER PIC; INTEGER I0,J0,PLEN,NCOPY);
  BEGIN WHILE ¬VIDXGP(PIC,I0,J0,PLEN,NCOPY) DO CALL(30,"SLEEP"); RETURN(TRUE); END;

INTERNAL BOOLEAN PROCEDURE VIDXGQ(REFERENCE INTEGER PIC; INTEGER I0,J0,PLEN,NCOPY);
IF VIDXG(PIC,I0,J0,PLEN,NCOPY) THEN RETURN(TRUE) ELSE
IF MANYJOB>58 THEN RETURN(VIDXGF(PIC,I0,J0,PLEN,NCOPY)) ELSE
   BEGIN
   PRELOAD_WITH 0; OWN INTEGER ARRAY CNT[1:1];
   INTEGER I;
   INTEGER ARRAY MESSAGE[1:32], HD[1:2];
   PRINT(" queueing"&'15&'12);

   comment CREATE VIDXGQ JOB;
   I←EXSWAP("DSK:VIDXGQ.DMP[1,3]");
   IF I=0 THEN BEGIN PRINT("no job slots for VIDXGQ!"&'15&'12); 
      RETURN(VIDXGF(PIC,I0,J0,PLEN,NCOPY)); END;

   comment TELL WHAT SIZE;
   MESSAGE[1]←CALL(0,"PJOB")*10000+CNT[1]; CNT[1]←CNT[1]+1;
   MESSAGE[2]←I0;
   MESSAGE[3]←J0;
   MESSAGE[4]←PLEN;
   MESSAGE[5]←NCOPY;
   PUTPFL(PIC,"DSK:"&CVS(MESSAGE[1])&".TMP[TMP,HPM]",2);
   HD[1]←I;  HD[2]←LOCATION(MESSAGE[1]);
   WHILE CALL(I,"GETNAM")≠CVSIX("READY!") DO CALL(0,"SLEEP");
   I←0;  START_CODE MAIL 0,ACCESS(HD[1]); comment SEND; SETOM I; END;

   SETFORMAT(0,7);
   IF I≠0 THEN
      BEGIN
      PRINT("couldn't send message to VIDXGQ"&'15&'12);
      RETURN(FALSE);
      END;

   RETURN(TRUE);
   END;

END;